#include <stdio.h>
#include "bsp_usart.h"

void init_usart_gpio(void);

void init_usart(void)
{
    init_usart_gpio();
    MCU_USART_RCU_FUN(MCU_USART_RCU);

    usart_deinit(MCU_USARTx);


    usart_baudrate_set(MCU_USARTx, 115200u);
    usart_parity_config(MCU_USARTx, USART_PM_NONE);
    usart_word_length_set(MCU_USARTx, USART_WL_8BIT);
    usart_stop_bit_set(MCU_USARTx, USART_STB_1BIT);

    usart_transmit_config(MCU_USARTx, USART_TRANSMIT_ENABLE);
    usart_receive_config(MCU_USARTx, USART_RECEIVE_ENABLE);
    
    usart_enable(MCU_USARTx);
}

void init_usart_gpio(void)
{
    MCU_USART_GPIO_RCU_FUN(MCU_USART_GPIO_RCU);

    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, MCU_USART_TX_PIN);
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, MCU_USART_RX_PIN);
}

int fputc(int ch, FILE *f)
{
    usart_data_transmit(MCU_USARTx, (uint8_t)ch);
    while(RESET == usart_flag_get(MCU_USARTx, USART_FLAG_TBE))
    {
        ;
    }
    return ch;
}
